package hashtable;

import java.util.HashMap;

/**
 * @author "随风Coding"
 * @email 1431471764@qq.com
 * @date 2025/8/17 07:55
 */
public class FourNumAdd {
    public static int fourAdd(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        // 1. 统计 nums1 和 nums2 元素两两之和的出现次数（键：和，值：出现次数）
        HashMap<Integer, Integer> sumABCount = new HashMap<>();
        for (int num1 : nums1) {
            for (int num2 : nums2) {
                int sum = num1 + num2;
                // 若 sum 已存在则计数+1，否则初始化为1
                sumABCount.put(sum, sumABCount.getOrDefault(sum, 0) + 1);
            }
        }

        // 2. 统计满足 nums1+nums2+nums3+nums4=0 的四元组数量
        int result = 0;
        for (int num3 : nums3) {
            for (int num4 : nums4) {
                int currentSum = num3 + num4;
                // 需要找的互补和为 0 - (num3+num4)
                int target = 0 - currentSum;
                // 若互补和存在，则累加其出现次数到结果
                if (sumABCount.containsKey(target)) {
                    result += sumABCount.get(target);
                }
            }
        }
        return result; // 关键修正：返回实际计算的结果
    }

    public static void main(String[] args) {
        // 测试用例1（官方示例）
        int[] A1 = {1, 2};
        int[] B1 = {-2, -1};
        int[] C1 = {-1, 2};
        int[] D1 = {0, 2};
        System.out.println("测试用例1结果：" + fourAdd(A1, B1, C1, D1)); // 输出2

        // 测试用例2（全0数组）
        int[] A2 = {0, 0};
        int[] B2 = {0, 0};
        int[] C2 = {0, 0};
        int[] D2 = {0, 0};
        System.out.println("测试用例2结果：" + fourAdd(A2, B2, C2, D2)); // 输出16

        // 测试用例3（无满足条件的组合）
        int[] A3 = {1, 2};
        int[] B3 = {3, 4};
        int[] C3 = {5, 6};
        int[] D3 = {7, 8};
        System.out.println("测试用例3结果：" + fourAdd(A3, B3, C3, D3)); // 输出0
    }
}